第 2 步 - 对已完成的插值作出反应

在本步骤中,根据相对方位设置指南针背景。相对方位是目的地和行驶方向之间的差异。

对已完成的插值作出反应

在本节中,您将使用插值完成 (Interpolation Completed) 触发器了解属性目标插值器 (Property Target Interpolator) 何时完成指南针表盘的旋转。插值完成且行驶方向与目的地一致时,使用RootPage 节点中的状态机 (State Manager) 设置指南针背景。

要对已完成的插值作出反应:

  1. 找到目的地和行驶方向之间的差异:
    1. 素材库 (Library)按下 Alt 并右键点击属性类型 (Property Types),选择属性类型 (Property Type) 并在新建属性类型 (New Property Type) 窗口中设置:
      • 名称 (Name)Interpolate.RelativeBearing
      • 数据类型 (Data Type)整数 (Integer)
    2. 工程 (Project) 中选择RootPage 节点,在属性 (Properties) 中点击+ 添加绑定 (+ Add Binding) 并在绑定参数编辑器 (Binding Argument Editor) 中设置:
      • 属性 (Property)Interpolate.RelativeBearing
      • 表达式 (Expression)
        ABS(MOD({@./Interpolate.Destination}-{@./Interpolate.Direction},360))
      点击保存 (Save)
      您可以使用此绑定将目的地和行驶方向间的差异存储到您在上一步中创建的Interpolate.RelativeBearing 属性。您可以使用模数函数将Interpolate.RelativeBearing 的值包装在 0 到 359 度范围内。
  2. 工程 (Project) 中,选择Direction > Value 节点,在属性 (Properties)绑定 (Bindings) 中点击现有绑定,在绑定参数编辑器 (Binding Argument Editor) 中将表达式 (Expression) 设为:
    MOD({#RootPage/Interpolate.Direction},360)
    点击保存 (Save)
    您可以使用绑定来将指南针中心显示的值包装在 0 到 359 度范围内。
  3. 了解属性目标插值器 (Property Target Interpolator) 何时完成插值并对其作出反应:
    1. 工程 (Project) 中选择RootPage 节点,在节点组件 (Node Components) > 触发器 (Triggers) 部分右键点击并选择添加触发器 (Add Trigger) > 动画 (Animation) > 插值完成 (Interpolation Completed)
      插值完成 (Interpolation Completed) 触发器拦截您选择的属性目标插值器 (Property Target Interpolator) 在其完成属性插值时发送的消息。
      使用 插值完成 (Interpolation Completed) 触发器拦截您在本教程第 1 步中添加的 属性目标插值器 (Property Target Interpolator) 在完成插值 Interpolate.Interpolator 属性值时发送的消息。
    2. 插值完成 (Interpolation Completed) 触发器的节点组件 (Node Components) > 触发器 (Triggers) 部分点击触发器设置 (Trigger Settings),在触发器设置编辑器 (Trigger Settings Editor) 窗口将消息源 (Message Source) 属性设为Dial 节点。
      使用 消息源 (Message Source) 属性设置希望 插值完成 (Interpolation Completed) 触发器拦截其消息的目标项。将 消息源 (Message Source) 属性设置为 Dial 节点,完成插值。因为我们想要知道在本教程第 1 步添加 属性目标插值器 (Property Target Interpolator)Dial 节点的时间,以及添加的节点。
    3. 触发器设置编辑器 (Trigger Settings Editor) 中点击添加条件 (Add condition) 并在触发器条件编辑器 (Trigger Condition Editor) 中设置:
      • 值 A (Value A)
        • 属性 (Property)Interpolate.RelativeBearing
      • 运算符 (Operator)=
      • 值 B (Value B)
        • 起始值 (Value From)固定 (Fixed)
        • 固定值 (Fixed Value) 为 0
      点击保存 (Save)
      使用触发条件,仅在插值完成且Interpolate.RelativeBearing 属性值为 0 时触发插值完成 (Interpolation Completed) 触发器。当 Interpolate.RelativeBearing 属性的值为 0 时,行驶方向与目的地一致。
    4. 节点组件 (Node Components) > 触发器 (Triggers) 部分的插值完成 (Interpolation Completed) 触发器中点击添加 (Add) 下拉菜单,选择设置属性 (Set Property) 动作,在动作设置中设置:
      • 目标属性 (Target Property)Interpolate.OnCourse
      • 固定值 (Fixed Value) 为启用
      使用动作设置当插值完成 (Interpolation Completed) 触发器触发且 Interpolate.RelativeBearing 属性值为 0 时Interpolate.OnCourse 属性为 true。当 Interpolate.OnCourse 属性设为 true,RootPage 节点中的状态机 (State Manager) 会将RootPage 节点中的背景笔刷 (Background Brush) 属性设为Green

现在,您更改 Compass.xml 文件中direction 元素的值并保存更改时,如果目的地与行驶方向一致,插值完成后指南针背景变为绿色。

调整指南针行为

在上一节中您添加了插值完成 (Interpolation Completed) 触发器,使用RootPage 节点中的状态机 (State Manager) 设置指南针背景颜色。但状态机只在指南针表盘旋转插值完成且目的地和行驶方向一致时才设置背景颜色。在本节中,您将学习添加属性变更时 (On Property Change) 触发器,在下列情况下作出反应:

要调整指南针行为:

  1. 在相对方位改变且行驶方向和目的地不一致时作出反应:
    1. 工程 (Project) 中选择RootPage 节点,在节点组件 (Node Components) > 触发器 (Triggers) 部分中添加属性变更时 (On Property Change) 触发器,在触发器设置 (Trigger Settings) 中将属性类型 (Property Type) 设为Interpolate.RelativeBearing属性。
      Kanzi 会在RootPage 节点中的Interpolate.RelativeBearing 属性值发生更改时触发触发器。
    2. 触发器设置编辑器 (Trigger Settings Editor) 中,为您在上一步骤中创建的属性变更时 (On Property Change) 触发器,点击添加条件 (Add condition) 并在触发器条件编辑器 (Trigger Condition Editor) 中设置:
      • 值 A (Value A)
        • 属性 (Property)Interpolate.RelativeBearing
      • 运算符 (Operator)!=
      • 值 B (Value B)
        • 起始值 (Value From)固定 (Fixed)
        • 固定值 (Fixed Value) 为 0
      点击保存 (Save)
      使用条件,Kanzi 仅在Interpolate.RelativeBearing 属性的值更改且Interpolate.RelativeBearing 属性的值不为 0 时触发触发器。Interpolate.RelativeBearing属性的值不为 0 时,行驶方向与目的地不一致。
    3. 节点组件 (Node Components) > 触发器 (Triggers) 部分的属性变更时 (On Property Change) 触发器中点击添加 (Add) 下拉菜单,选择设置属性 (Set Property) 动作,在动作设置中设置:
      • 目标属性 (Target Property)Interpolate.OnCourse
      • 固定值 (Fixed Value) 为禁用
      使用动作设置在 Interpolate.RelativeBearing 属性的值更改且 Interpolate.RelativeBearing 属性的值不为 0 时Interpolate.OnCourse 属性为 false。Interpolate.OnCourse属性设为 false 时,RootPage 节点中的状态机 (State Manager)RootPage 节点中的背景笔刷 (Background Brush) 属性设为Black
  2. 在目的地改变且与行驶方向一致时作出反应:
    1. 工程 (Project) 中选择RootPage 节点,在节点组件 (Node Components) > 触发器 (Triggers)部分点击 新加属性改变时的触发器 (Add new trigger for On Property Change),在您添加的触发器 触发器设置 (Trigger Settings) 中将 属性类型 (Property Type) 设为 Interpolate.Destination 属性。
      Kanzi 会在RootPage 节点中的Interpolate.Destination 属性值发生更改时触发触发器。
    2. 触发器设置编辑器 (Trigger Settings Editor)中添加条件并在触发器条件编辑器 (Trigger Condition Editor) 中设置:
      • 值 A (Value A)
        • 属性 (Property)Interpolate.RelativeBearing
      • 运算符 (Operator)=
      • 值 B (Value B)
        • 起始值 (Value From)固定 (Fixed)
        • 固定值 (Fixed Value) 为 0
      点击保存 (Save)
      使用触发器条件,仅在Interpolate.RelativeBearing 属性的值更改且Interpolate.RelativeBearing 属性的值为 0 时触发触发器。当 Interpolate.RelativeBearing 属性的值为 0 时,行驶方向与目的地一致。
    3. 节点组件 (Node Components) > 触发器 (Triggers) 部分的属性变更时 (On Property Change) 触发器中点击添加 (Add) 下拉菜单,选择设置属性 (Set Property) 动作,在动作设置中设置:
      • 目标属性 (Target Property)Interpolate.OnCourse
      • 固定值 (Fixed Value) 为启用
      使用动作设置在Interpolate.RelativeBearing 属性的值更改且Interpolate.RelativeBearing 属性的值为 0 时Interpolate.OnCourse 属性为 true。当 Interpolate.OnCourse 属性设为 true,RootPage 节点中的状态机 (State Manager) 会将RootPage 节点中的背景笔刷 (Background Brush) 属性设为Green

现在,您更改Compass.xml文件中directiondestination XML 元素中的值并保存文件时,指南针背景作如下更改:


< 上一步

接下来该做什么?

在本教程中,您学习了如何时域属性目标插值器 (Property Target Interpolator) 动态设置属性的目标值,并随着时间的推移将当前值插值到目标值。您还学习了如何使用插值完成 (Interpolation Completed) 触发器对已完成的插值作出反应。

现在您可以:

另请参阅

获取关于已完成插值的信息

使用绑定

使用触发器